جزوه · فصل پنجم · جلسه ۵۶ · مجازی‌سازی در لینوکس ← بازگشت به فهرست
📘 فصل پنجم · جلسه ۵۶ مجازی‌سازی در لینوکس
📅 تاریخ: چهارشنبه، ۲۸ مرداد ۱۴۰۵ 👤 مدرس: محمد عابدینی 🐚 Zsh · 🐧 Debian (کالی) · 📦 Red Hat
این جلسه یکی از مباحث مهم در آزمون‌های لینوکس است. تفاوت Type 1 و Type 2 حتماً سوال می‌آید.
🏢 قبل از شروع، یه مثال ساده:

فرض کن یه ساختمان بزرگ داری. می‌تونی چند تا روش برای تقسیمش به بخش‌های کوچیک‌تر استفاده کنی:

  • مجازی‌سازی سطح یک (Type 1): مثل اینه که ساختمان رو به چند آپارتمان مستقل تقسیم کنی که هرکدوم درِ جداگانه دارن (مثل KVM).
  • مجازی‌سازی سطح دو (Type 2): مثل اینه که توی یکی از آپارتمان‌ها، یه اتاق رو به اجاره بدی (مثل VirtualBox).
  • کانتینرها: مثل اینه که توی یه آپارتمان، چند تا اتاق رو با دیوارهای موقت جدا کنی (مثل Docker).

▍ مقدمه

مجازی‌سازی (Virtualization) به معنای اجرای چندین سیستم‌عامل یا محیط مجزا روی یک سخت‌افزار فیزیکی است. این تکنولوژی به مدیران سیستم کمک می‌کند تا از منابع سخت‌افزاری به‌ینه‌تر استفاده کنند، هزینه‌ها را کاهش دهند و مدیریت سیستم را آسان‌تر کنند.

▍ انواع مجازی‌سازی

🔵 Type 1 (Hypervisor Bare-Metal)

  • مستقیماً روی سخت‌افزار اجرا می‌شود.
  • میزبان (Host) نیست، بلکه خودش میزبان است.
  • عملکرد بالا و مصرف منابع کم.
  • مثال‌ها: KVM, Xen, Hyper-V

🟠 Type 2 (Hypervisor میزبانی)

  • به عنوان یک برنامه روی سیستم‌عامل میزبان اجرا می‌شود.
  • عملکرد کمتر از Type 1 (به دلیل لایه میزبان).
  • مناسب برای تست و توسعه.
  • مثال‌ها: VirtualBox, VMware Workstation
تفاوت کلیدی: Type 1 مستقیماً روی سخت‌افزار اجرا می‌شود (بدون سیستم‌عامل میزبان)، اما Type 2 روی یک سیستم‌عامل میزبان نصب می‌شود.

▍ مجازی‌سازی سطح یک (Type 1) — KVM

KVM (Kernel-based Virtual Machine) یک راه‌حل مجازی‌سازی متن‌باز است که به هسته لینوکس تبدیل به یک Hypervisor Type 1 می‌شود.

• پیش‌نیازهای سخت‌افزاری

برای استفاده از KVM، پردازنده باید از مجازی‌سازی سخت‌افزاری پشتیبانی کند:

┌──(ya3in㉿kali)-[~] └─$ grep -E "vmx|svm" /proc/cpuinfo

توضیح: این دستور نشان می‌دهد که پردازنده از مجازی‌سازی سخت‌افزاری پشتیبانی می‌کند یا خیر.

• نصب و راه‌اندازی KVM

┌──(ya3in㉿kali)-[~] └─$ sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager

توضیح: نصب KVM و ابزارهای مدیریت آن در دبیان/کالی.

برای بررسی اینکه KVM بارگذاری شده است، از دستور lsmod | grep kvm استفاده کنید.
┌──(ya3in㉿kali)-[~] └─$ lsmod | grep -i kvm kvm_intel 28672 0 kvm 77824 1 kvm_intel

توضیح: این خروجی نشان می‌دهد که ماژول KVM (برای پردازنده Intel) بارگذاری شده است.

• بارگذاری دستی ماژول KVM

اگر ماژول KVM بارگذاری نشده باشد، می‌توانید آن را به‌صورت دستی بارگذاری کنید:

┌──(ya3in㉿kali)-[~] └─$ sudo modprobe kvm-amd

توضیح: برای پردازنده‌های AMD از kvm-amd و برای Intel از kvm-intel استفاده کنید.

نکته امتحانی: برای پردازنده‌های Intel از modprobe kvm-intel و برای AMD از modprobe kvm-amd استفاده می‌شود.

▍ مجازی‌سازی سطح دو (Type 2)

در این نوع مجازی‌سازی، Hypervisor به عنوان یک برنامه معمولی روی سیستم‌عامل میزبان اجرا می‌شود. سیستم‌عامل مهمان (Guest) روی این Hypervisor اجرا می‌شود و ممکن است کاملاً با سیستم‌عامل میزبان متفاوت باشد.

💡 مثال: VirtualBox روی ویندوز نصب می‌شود و یک ماشین مجازی لینوکس را روی آن اجرا می‌کند.

• مزایا و معایب Type 2

▍ مقایسه Type 1 و Type 2

ویژگی Type 1 (Bare-Metal) Type 2 (Hosted)
اجرا مستقیماً روی سخت‌افزار روی سیستم‌عامل میزبان
عملکرد بالا متوسط تا پایین
مصرف منابع کم زیاد
مثال KVM, Xen, Hyper-V VirtualBox, VMware Workstation
کاربرد سرورها، دیتاسنترها توسعه، تست، دسکتاپ
در امتحان معمولاً سوال می‌شود: «KVM از چه نوع Hypervisor است؟» پاسخ: Type 1 (Bare-Metal).

▍ کانتینرها (Containers)

کانتینرها یک روش سبک‌تر برای مجازی‌سازی هستند که به جای مجازی‌سازی سخت‌افزار، هسته (Kernel) سیستم میزبان را به اشتراک می‌گذارند.

🟣 مجازی‌سازی کامل (VM)

  • هر VM سیستم‌عامل کامل دارد.
  • هسته اختصاصی دارد.
  • حجم بالا (چند گیگابایت).
  • زمان بوت: چند دقیقه.

🟢 کانتینرها

  • هسته میزبان را به اشتراک می‌گذارند.
  • فقط برنامه و کتابخانه‌های آن را دارند.
  • حجم کم (چند مگابایت).
  • زمان بوت: چند ثانیه.
تفاوت اصلی کانتینرها با ماشین‌های مجازی: کانتینرها هسته (Kernel) میزبان را به اشتراک می‌گذارند، اما ماشین‌های مجازی هر کدام هسته‌ی مخصوص خود را دارند.

• کانتینرهای برنامه (Application Containers)

این نوع کانتینرها روی یک برنامه خاص یا یک پشته برنامه (مثل وب سرور) تمرکز دارند. آنها به شدت در DevOps و توسعه مداوم نرم‌افزار (Continuous Deployment) استفاده می‌شوند.

💡 مزیت کانتینرهای برنامه:
  • توسعه‌دهندگان می‌توانند برنامه را در یک کانتینر جدید تغییر دهند.
  • همان کانتینر در محیط تست و سپس تولید (Production) استفاده می‌شود.
  • کانتینر قدیمی حذف و کانتینر جدید جایگزین می‌شود (بدون وقفه).
  • تفاوت بین محیط توسعه و تولید از بین می‌رود.

• ابزارهای محبوب کانتینر

نکته امتحانی: Docker محبوب‌ترین ابزار کانتینر و Kubernetes محبوب‌ترین ابزار مدیریت کانتینر است.

▍ خلاصه و جمع‌بندی

مفهوم توضیح
Type 1 Hypervisor مستقیماً روی سخت‌افزار (مثل KVM)
Type 2 Hypervisor روی سیستم‌عامل میزبان (مثل VirtualBox)
KVM Hypervisor Type 1 در لینوکس
vmx / svm پشتیبانی از مجازی‌سازی سخت‌افزاری (Intel/AMD)
کانتینرها مجازی‌سازی در سطح سیستم‌عامل (سبک‌تر)
Docker ابزار محبوب کانتینر
✅ جمع‌بندی نهایی برای امتحان:
  • Type 1: KVM, Xen, Hyper-V → اجرا روی سخت‌افزار
  • Type 2: VirtualBox, VMware Workstation → اجرا روی سیستم‌عامل میزبان
  • KVM: نیاز به vmx (Intel) یا svm (AMD)
  • دستورات KVM: lsmod | grep kvm، modprobe kvm-amd
  • کانتینرها: سبک‌تر از VM، هسته را به اشتراک می‌گذارند.
  • Docker: معروف‌ترین ابزار کانتینر.